package zgh.structure.agent.cglibproxy;

import zgh.structure.agent.jdkproxy.TVCompany;
import zgh.structure.agent.jdkproxy.TVFactory;
import zgh.structure.agent.staticproxy.TV;

/**
 * @author zhanggonghui
 * @create 2022-04-17 14:44
 * @describe
 * Cglib代理可以称为子类代理，是在内存中构建一个子类对象，从而实现对目标对象功能的扩展。
 * C代理商不仅想代理公司，而且还想代理多个工厂的产品。
 * Cglib通过Enhancer 来生成代理类，通过实现MethodInterceptor接口，并实现其中的intercept方法，在此方法中可以添加增强方法，并可以利用反射Method或者MethodProxy继承类 来调用原方法
 **/
public class TVConsumer {

    public static void main(String[] args) {
        TVCompany tvCompany = (TVCompany) new TVProxyCglib().getProxyInstance(TVFactory.class);
        TV tv = tvCompany.produceTV();
        tvCompany.repair(tv);
        System.out.println("==============================");

        TVFactoryB tvFactoryB = (TVFactoryB) new TVProxyCglib().getProxyInstance(TVFactoryB.class);
        TV tv1 = tvFactoryB.produceTVB();
        tvFactoryB.repairB(tv1);
    }

}
